package com.talkweb.ncfw.security;

import java.lang.reflect.Method;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.security.access.AuthorizationServiceException;

import com.talkweb.ncfw.annotation.ProtectFunc;

/**
 * <p>文件名称: MethodSecurityInterceptor.java</p>
 * <p>文件描述: 方法安全拦截器</p>
 * <p>版权所有: 版权所有(C)2010</p>
 * <p>内容摘要: 简要描述本文件的内容，包括主要模块、函数及能的说明</p>
 * <p>其他说明: 其它内容的说明</p>
 * <p>完成日期: 2011-10-23</p>
 * <p>修改记录1:</p>
 * <pre>
 *    修改日期:
 *    修 改 人:
 *    修改内容:
 * </pre>
 * <p>修改记录2：…</p>
 * @author  Wuqingming
 */
public class MethodSecurityInterceptor implements MethodInterceptor {
	private ISecurityManager securityManager;

	public Object invoke(MethodInvocation invocation) throws Throwable {
		Method targetMethod 	= invocation.getMethod();			//目标方法
		//判断方法是否为受保护的功能
		ProtectFunc protectFunc = targetMethod.getAnnotation(ProtectFunc.class);
		if (protectFunc == null) {
			return invocation.proceed();
		}
		boolean flag = this.securityManager.hasFuncPermission(SecurityHelper.getCurrentUser(), protectFunc.funccode());
		if (!flag) {
			throw new AuthorizationServiceException("无此功能访问权限，功能编号为[" + protectFunc.funccode() + "]");
		}
		return invocation.proceed();
	}

}

